<?php
class ParticipanteController extends Zend_Controller_Action
{
   	private $juridica;
   	private $fisica;
   	private $acesso;

	function init(){
		$this->initView();
		if ($this->view->baseUrl==null){
        	$this->view->baseUrl = $this->_request->getBaseUrl();
		}
		$this->view->styleUrl = '/styles';
		$this->view->scriptUrl= '/scripts';
		$this->view->imageUrl = '/images';	

		Zend_Loader::loadClass('Token');
		$this->view->currentStep = 0;		
    }

	function indexAction(){
		$this->_redirect('/participante/add');
	}

	function solicitarAction(){
		$this->_helper->viewRenderer->setNoRender();
		$filter = new Zend_Filter_StripTags();
		
		$juridica = new juridica();
		$fisica = new fisica();
		
        $juridica->id_cidade 			= (int) $this->_request->getParam('id_cidade');
        $juridica->ds_endereco			= trim($filter->filter($this->_request->getParam('ds_endereco')));
        $juridica->nr_endereco			= trim($filter->filter($this->_request->getParam('nr_endereco')));
        $juridica->ds_bairro			= trim($filter->filter($this->_request->getParam('ds_bairro')));
        $juridica->ds_complemento		= trim($filter->filter($this->_request->getParam('ds_complemento')));
        $juridica->ds_caixa_postal		= trim($filter->filter($this->_request->getParam('ds_caixaPostal')));
        $juridica->nr_telefone			= trim($filter->filter($this->_request->getParam('nr_telefone')));
        $juridica->nr_fax				= trim($filter->filter($this->_request->getParam('nr_fax')));
        $juridica->ds_razao_social		= trim($filter->filter($this->_request->getParam('ds_razao_social')));
        $juridica->ds_cnpj				= trim($filter->filter($this->_request->getParam('ds_cnpj')));
        $juridica->ds_insc_estadual		= trim($filter->filter($this->_request->getParam('ds_nsc_estadual')));
        $juridica->ds_cadastur 			= trim($filter->filter($this->_request->getParam('ds_cadastur')));
        $juridica->ds_outro_documento 	= trim($filter->filter($this->_request->getParam('ds_documento')));
        $juridica->nm_outro_documento 	= trim($filter->filter($this->_request->getParam('nm_ocumento')));
        $juridica->ds_site 				= trim($filter->filter($this->_request->getParam('ds_site')));
        $juridica->id_atuacao 			= (int) $this->_request->getParam('id_atuacao');
	
        $fisica->id_fisica 			= (int) $this->_request->getParam('id_fisica');
		$fisica->ds_cpf 			= trim($this->filter->filter($this->_request->getParam('dsCpf')));
		$fisica->ds_rg 				= trim($this->filter->filter($this->_request->getParam('dsRg')));
		$fisica->ds_nome 			= trim($this->filter->filter($this->_request->getParam('primeiro_nome')));
		$fisica->ds_ultimo_nome		= trim($this->filter->filter($this->_request->getParam('ultimo_nome')));
		$fisica->ds_nome_credencial = $fisica->ds_nome.' '.$fisica->ds_ultimo_nome;
		$fisica->ds_email			= trim($this->filter->filter($this->_request->getParam('dsEmail')));
		$fisica->sexo->load((int) $this->_request->getParam('idSexo'));
		$fisica->civil->load((int) $this->_request->getParam('idCivil'));
        $fisica->nr_telefone			= trim($this->filter->filter($this->_request->getParam('nrTelefoneFisica')));
        $fisica->nr_celular			= trim($this->filter->filter($this->_request->getParam('nrCelular')));
    	return $juridica;
	
	}
	
	private function popular($obj, $post){
    	$filter = new Zend_Filter_StripTags();
		$obj->ds_nome				= trim($filter->filter($post['dsFantasia']));
        $obj->id_cidade 			= (int) $post['idCidade'];
        $obj->ds_endereco			= trim($filter->filter($post['dsEndereco']));
        $obj->nr_endereco			= trim($filter->filter($post['nrEndereco']));
        $obj->ds_bairro				= trim($filter->filter($post['dsBairro']));
        $obj->ds_complemento		= trim($filter->filter($post['dsComplemento']));
        $obj->ds_caixa_postal		= trim($filter->filter($post['dsCaixaPostal']));
        $obj->nr_telefone			= trim($filter->filter($post['nrTelefone']));
        $obj->nr_fax				= trim($filter->filter($post['nrFax']));
        $obj->ds_razao_social		= trim($filter->filter($post['dsRazaoSocial']));
        $obj->ds_cnpj				= trim($filter->filter($post['dsCnpj']));
        $obj->ds_insc_estadual		= trim($filter->filter($post['dsInscEstadual']));
        $obj->ds_cadastur 			= trim($filter->filter($post['dsCadastur']));
        $obj->ds_outro_documento 	= trim($filter->filter($post['dsDocumento']));
        $obj->nm_outro_documento 	= trim($filter->filter($post['nmDocumento']));
        $obj->ds_site 				= trim($filter->filter($post['dsSite']));
        $obj->id_atuacao 			= (int) $post['idAtuacao'];
    	return $obj;
    }		
	
	function validarAction(){
		$filter = new Zend_Filter_StripTags();
		$this->view->title = "Confirmar participação";
		$this->view->action= "validar";
		$cdValidacao = $filter->filter($this->_getParam('cd_validacao'));
		$idAcesso 	 = (int) substr(trim($filter->filter($this->_getParam('cd_validacao'))), 0, 10);
		$this->view->linkManual="";
		$acesso = new AcessoEvento(false);
		$acesso->_load($idAcesso);
		$fisica = new Fisica(false);
		$fisica->load($acesso->id_participante);
		$juridica = new Juridica(false);
		$juridica->load($fisica->id_juridica);

		if ($idAcesso==null){
			$this->_redirect('.');
		} else {
			$acesso = new AcessoEvento(false);
			$acesso->_load($idAcesso);
			if (($acesso->id_acesso==NULL)||($acesso->cd_validacao!=$cdValidacao)){
        		$this->view->mensagem = 'Código de validação inválido!';
			} elseif ($acesso->in_email_valido==1){
				$this->view->mensagem = '<br>Código de validação já confirmado. Obrigado!';
			} else {
				$fisica = new Fisica(false);
				$fisica->load($acesso->id_participante);
				$this->view->mensagem = '<center><br><b>'.$fisica->ds_nome_credencial.'</b><br>'.$juridica->ds_nome.'</center>
										<br>Obrigado por validar sua participação na Feira de Negócios Turísticos BNT MERCOSUL!';
        		$acesso->emailEnviado();
        		$acesso->salvar();
			}
		}
		$this->render();
	}

	function addAction(){
		$this->view->linkManual = $this->view->baseUrl."/public/manual/manual_cadastro_participante.html";
		$this->view->action = $this->_request->getBaseUrl()."/participante/add";
		$this->view->validacao="participante";
		$this->view->title = "Adicionar participante";
		$this->view->addSteps = true;
		if (strtolower($_SERVER['REQUEST_METHOD']) == 'post'){			
			//Se ocorrer algum erro em alguma das inserções nenhuma é validada
			//O objetos model devem ser instanciados dentro do beginTransaction
			$db = Zend_Registry::get('db');
			$db->beginTransaction();
			try {	
				$this->juridica = new Juridica(false);
				$this->fisica   = new Fisica(false);
				$this->acesso   = new AcessoEvento(false);			
				$this->popularEmpresa();
				$this->popularPessoa();
				$this->popularAcesso();				
				if ($this->juridica->hasError()){
					$this->view->currentStep = 0;
					throw new Exception($this->juridica->getErrorMsg(), 5555);
				}
				$this->juridica->salvar();
				$this->fisica->id_juridica=$this->juridica->id_pessoa;
				$this->fisica->validar();
				if ($this->fisica->hasError()){
					$this->view->currentStep = 1;
					throw new Exception($this->fisica->getErrorMsg(), 5555);
				}
				$this->fisica->salvar();
				$this->acesso->id_participante = (int) $this->fisica->id_fisica;
				$this->acesso->validar();
				if ($this->acesso->hasError()){
					$this->view->currentStep = 2;
					throw new Exception($this->acesso->getErrorMsg(), 5555);					
				}
				$this->acesso->salvar();
				$this->acesso->cd_validacao = str_pad($this->acesso->id_acesso, 10, '0', STR_PAD_LEFT).$this->acesso->cd_validacao;
				$this->acesso->salvar();		
				$db->commit();
			} catch (Exception $e) {
				$db->rollback();
				//O bloco begintransaction não está funcionando
				$this->fisica->excluir();
				$this->fisica->id_pessoa = null;
				$this->fisica->id_juridica = null;
				$this->juridica->excluir($this->juridica->id_pessoa);
				$this->juridica->id_pessoa = null;
				$this->juridica->id_juridica = null;
				$this->view->mensagem_erro = $e->getMessage();
				return;
			}
			if (!Zend_Session::isStarted()){
				Zend_Session::start();
			}

			$mail = new MailController($this->view->baseUrl);
			$mail->enviarEmailConfirmacao($this->fisica->ds_email, $this->acesso->cd_validacao, $this->acesso->id_evento);

			$mensagem = 'Confirmação enviada para o e-mail "'.$this->fisica->ds_email.'"!';
			$operacao = 'Solicitação efetuada com sucesso.';
			$links = array(array('link'=>$this->view->baseUrl ."/participante/add",	 										 'descricao'=>"Cadastrar novo participante"),
						   array('link'=>$this->view->baseUrl ."/participante/add?id_empresa=".$this->juridica->id_juridica.'&token='.Zend_Session::getId(), 'descricao'=>"Cadastrar outro participante para a mesma empresa"));

			$this->_forward('status', 'util', null,
							array('operacao' => $operacao,
								  'mensagem'=>$mensagem,
								  'links'	=>$links));
							
			
			return;
        } else {
       		$this->juridica = new Juridica(false);
			$this->fisica   = new Fisica(false);
			$this->acesso	= new AcessoEvento(false);
        	if (!is_null($this->_getParam('id_empresa'))){
       			if (is_null($this->_getParam('token')) || $this->_getParam('token') != Zend_Session::getId()){
       				null;//$this->view->mensagem_alerta = UtilController::getErrorMessage(10); //Sessão expirada
       			}else {
       				$this->juridica->load($this->_getParam('id_empresa'));
        		}
        	}
        	//Popular variaveis VIEW
	        $this->view->juridica=$this->juridica;
	        $this->view->fisica  =$this->fisica;
	        $this->view->acesso  =$this->acesso;
        	$this->render();
    	}
	}

	private function popularEmpresa(){
		$this->juridica->id_juridica = (int) trim($this->_request->getPost('id_juridica'));
        if (($this->juridica->id_juridica==null) || ($this->juridica->id_juridica==0)){
        	$filter = new Zend_Filter_StripTags();
        	$this->juridica->ds_nome				=trim($filter->filter($this->_request->getPost('ds_fantasia')));
			$this->juridica->id_cidade 				=(int) $this->_request->getPost('idCidade');
			$this->juridica->ds_endereco     		=trim($filter->filter($this->_request->getPost('ds_endereco')));
			$this->juridica->nr_endereco     		=trim($filter->filter($this->_request->getPost('nr_endereco')));
			$this->juridica->ds_bairro       		=trim($filter->filter($this->_request->getPost('ds_bairro')));
			$this->juridica->ds_complemento 		=trim($filter->filter($this->_request->getPost('ds_complemento')));
			$this->juridica->ds_caixa_postal 		=trim($filter->filter($this->_request->getPost('ds_cep')));
			$this->juridica->nr_telefone 			=trim($filter->filter($this->_request->getPost('fone_empresa')));
			$this->juridica->ds_cnpj 	 	       	=trim($filter->filter($this->_request->getPost('ds_cnpj')));
			$this->juridica->ds_razao_social     	=trim($filter->filter($this->_request->getPost('ds_razao_social')));
			$this->juridica->ds_insc_estadual	   	=trim($filter->filter($this->_request->getPost('ds_insc_estadual')));
			$this->juridica->ds_cadastur     	   	=trim($filter->filter($this->_request->getPost('ds_cadastur')));
			$this->juridica->nm_outro_documento  	=trim($filter->filter($this->_request->getPost('nm_outro_documento')));
			$this->juridica->ds_outro_documento  	=trim($filter->filter($this->_request->getPost('ds_outro_documento')));
			$this->juridica->ds_site			   	=trim($filter->filter($this->_request->getPost('ds_site')));
			$this->juridica->id_atuacao          	=trim($filter->filter($this->_request->getPost('id_atuacao')));
			$this->juridica->dt_inclusao 	  	  	=date('Y-m-d H:m:s');
			$this->juridica->id_usuario_inc	  		='00';		
		} else {
			$this->juridica->load($this->juridica->id_juridica);
		}
		$this->view->juridica           		=$this->juridica;

	}

	private function popularPessoa(){				
		$filter = new Zend_Filter_StripTags();
		$this->fisica->ds_nome			  =trim($filter->filter($this->_request->getPost('primeiro_nome')));
		$this->fisica->nr_celular 		  =trim($filter->filter($this->_request->getPost('nr_celular')));
		$this->fisica->nr_telefone 		  =trim($filter->filter($this->_request->getPost('fone_fisica')));
		$this->fisica->ds_cpf			  =trim($filter->filter($this->_request->getPost('ds_cpf')));
		$this->fisica->ds_rg			  =trim($filter->filter($this->_request->getPost('ds_rg')));
		$this->fisica->ds_ultimo_nome	  =trim($filter->filter($this->_request->getPost('ds_ultimo_nome')));
		$this->fisica->ds_nome_credencial =$this->fisica->ds_nome.' '.$this->fisica->ds_ultimo_nome;
		$this->fisica->ds_email			  =trim($filter->filter($this->_request->getPost('ds_email')));
		$this->fisica->sexo->id_sexo	  =(int) $this->_request->getPost('id_sexo');
		$this->fisica->civil->id_civil	  =(int) $this->_request->getPost('id_civil');
		$this->fisica->dt_inclusao 	  	  =date('Y-m-d H:m:s');
		$this->fisica->id_usuario_inc	  ='00';
		$this->view->fisica  		      =$this->fisica;
	}

	private function popularAcesso(){
		//Deve ser utilizada após a inserção da pessoa física
		$this->acesso->id_evento 		  = (int) $this->_request->getPost('idEvento');
		$this->acesso->id_categoria_acesso= (int) $this->_request->getPost('idCategoria');
		$this->acesso->id_status		  = 2;// Confirmação pendente
		$this->acesso->in_email_valido	  = (int) 0;
		$this->acesso->cd_validacao       = Login::makePassword(12, true, true, false).$this->fisica->id_pessoa.$this->_request->getPost('idEvento');
		$this->view->acesso         	  = $this->acesso;
	}
}